package net.zoneland.knowledge.enums;

import java.util.Optional;
import java.util.stream.Stream;

/**
 * 省公司和11地市分公司DN.
 **/
public enum CmpDnEnum {

    /**
     * ZMCC.
     */
    ZMCC("O=zmcc","1", "省公司"),
    /**
     * HZZMCC.
     */
    HZZMCC("OU=hzzmcc,O=zmcc", "2","杭州分公司"),
    /**
     * NBZMCC.
     */
    NBZMCC("OU=nbzmcc,O=zmcc", "3","宁波分公司"),
    /**
     * WZZMCC.
     */
    WZZMCC("OU=wzzmcc,O=zmcc", "4","温州分公司"),
    /**
     * JHZMCC.
     */
    JHZMCC("OU=jhzmcc,O=zmcc", "6","金华分公司"),
    /**
     * TZZMCC.
     */
    TZZMCC("OU=tzzmcc,O=zmcc", "5","台州分公司"),
    /**
     * SXZMCC.
     */
    SXZMCC("OU=sxzmcc,O=zmcc", "7","绍兴分公司"),
    /**
     * JXZMCC.
     */
    JXZMCC("OU=jxzmcc,O=zmcc", "8","嘉兴分公司"),
    /**
     * HUZMCC.
     */
    HUZMCC("OU=huzmcc,O=zmcc", "9","湖州分公司"),
    /**
     * LSZMCC.
     */
    LSZMCC("OU=lszmcc,O=zmcc", "10","丽水分公司"),
    /**
     * ZSZMCC.
     */
    ZSZMCC("OU=zszmcc,O=zmcc", "11","舟山分公司"),
    /**
     * QZZMCC.
     */
    QZZMCC("OU=qzzmcc,O=zmcc", "12","衢州分公司");

    /**
     * 公司dn.
     */
    private final String value;
    /**
     * 知识库标识，省公司和11个地市，用来区分各个租户的知识库
     */
    private final String cityId;

    /**
     * 公司名称.
     */
    private final String name;

    CmpDnEnum(String value, String cityId, String name) {
        this.value = value;
        this.cityId = cityId;
        this.name = name;
    }

    public String getValue() {
        return value;
    }
    public String getCityId() {
        return cityId;
    }

    public String getName() {
        return name;
    }

    /**
     * 根据值获取id
     * @Author Pbody
     * @Date 0:15 2020/4/25
     * @Param [value]
     * @return net.zoneland.aitalk.util.enums.CmpDnEnum
     **/
    public static String getCityByValue(String value) {
        return Optional.ofNullable(
                Stream.of(CmpDnEnum.values())
                        .filter(x -> x.getValue().equalsIgnoreCase(value))
                        .findFirst().orElse(null)
        ).map(CmpDnEnum::getCityId).orElse(null);
    }

    /**
     * 根据cityId获取value.
     * @Author Pbody
     * @Date 0:15 2020/4/25
     * @Param [cityId]
     * @return net.zoneland.aitalk.util.enums.CmpDnEnum
     **/
    public static String getValueByCityId(String cityId) {
        return Optional.ofNullable(
            Stream.of(CmpDnEnum.values())
                .filter(x -> x.getCityId().equalsIgnoreCase(cityId))
                .findFirst().orElse(null)
        ).map(CmpDnEnum::getValue).orElse(null);
    }

    /**
     * 根据值获取名称
     * @Author Pbody
     * @Date 0:15 2020/4/25
     * @Param [value]
     * @return net.zoneland.aitalk.util.enums.CmpDnEnum
     **/
    public static String getNameByValue(String value) {
        return Optional.ofNullable(
                Stream.of(CmpDnEnum.values())
                        .filter(x -> x.getValue().equalsIgnoreCase(value))
                        .findFirst().orElse(null)
        ).map(CmpDnEnum::getName).orElse(null);
    }

    /**
     * 根据值获取对象
     * @Author Pbody
     * @Date 0:15 2020/4/25
     * @Param [value]
     * @return net.zoneland.aitalk.util.enums.CmpDnEnum
     **/
    public static CmpDnEnum getByValue(String value) {
        for (CmpDnEnum enumObj : CmpDnEnum.values()) {
            if (enumObj.getValue().equalsIgnoreCase(value)) {
                return enumObj;
            }
        }
        return null;
    }

    /**
     * 根据名字获取value
     * @param name 省公司
     * @return O=zmcc
     */
    public static String getValueByName(String name) {
        for (CmpDnEnum enumObj : CmpDnEnum.values()) {
            if (enumObj.getName().equalsIgnoreCase(name)) {
                return enumObj.getValue();
            }
        }
        return null;
    }
}
